import request from "@/utils/request";

const USER_BASE_URL = "/api/v1/platformUser";

const UserAPI = {
  /**
   * 获取当前登录用户信息
   *
   * @returns 登录用户昵称、头像信息，包括角色和权限
   */
  getInfo() {
    return request<any, UserInfo>({
      url: `${USER_BASE_URL}/me`,
      method: "get",
    });
  },

  /**
   * 注册
   *
   * @param data 用户表单数据
   */
  register(data: UserForm) {
    return request<any, LoginResult>({
      url: `${USER_BASE_URL}/register`,
      method: "post",
      data: data,
    });
  },

  /**
   * 校验账号唯一性
   *
   * @param data 账号
   */
  checkAccount(data: string) {
    return request<any, boolean>({
      url: `${USER_BASE_URL}/checkAccount`,
      method: "post",
      params: { account: data },
    });
  },

  /**
   * 校验邮箱唯一性
   *
   * @param data 用户表单数据
   */
  checkEmail(data: UserForm) {
    return request<any, boolean>({
      url: `${USER_BASE_URL}/checkEmail`,
      method: "post",
      params: { email: data },
    });
  },

  /**
   * 修改用户密码
   *
   * @param id 用户ID
   * @param password 新密码
   */
  resetPassword(id: string, password: string) {
    return request({
      url: `${USER_BASE_URL}/${id}/password/reset`,
      method: "put",
      params: { password: password },
    });
  },

  /** 获取个人中心用户信息 */
  getProfile() {
    return request<any, UserProfileVO>({
      url: `${USER_BASE_URL}/profile`,
      method: "get",
    });
  },

  /** 修改个人中心用户信息 */
  updateProfile(data: UserProfileForm) {
    return request({
      url: `${USER_BASE_URL}/profile`,
      method: "put",
      data: data,
    });
  },

  /** 修改个人中心用户密码 */
  changePassword(data: PasswordChangeForm) {
    return request({
      url: `${USER_BASE_URL}/password`,
      method: "put",
      data: data,
    });
  },

  /** 绑定个人中心用户邮箱 */
  bindEmail(data: EmailBindingForm) {
    return request({
      url: `${USER_BASE_URL}/email`,
      method: "put",
      data: data,
    });
  },
};

export default UserAPI;

/** 登录用户信息 */
export interface UserInfo {
  /** 用户ID */
  userId?: string;

  /** 用户名 */
  userName?: string;

  /** 昵称 */
  nickName?: string;

  /** 头像URL */
  avatar?: string;

  /** 角色 */
  roles: string[];

  /** 权限 */
  perms: string[];
}

/**
 * 用户分页查询对象
 */
export interface UserPageQuery extends PageQuery {
  /** 搜索关键字 */
  keywords?: string;

  /** 用户状态 */
  isActive?: number;
  /** 开始时间 */
  createTimes?: Array<string>[];
  /** 开始时间 */
  createTimeStart?: string;
  /** 开始时间 */
  createTimeEnd?: string;
}

/** 用户分页对象 */
export interface UserPageVO {
  /**
   * 主键
   */
  id?: string;

  /**
   * 账号 (必填)
   */
  userAccount: string;

  /**
   * 昵称 (必填)
   */
  nickname: string;

  /**
   * 密码 (必填)
   */
  password: string;

  /**
   * 头像 URL (必填)
   */
  avatar: string;

  /**
   * 性别 (0-女; 1-男) (必填)
   */
  gender: number;

  /**
   * 出生日期 (格式: yyyy-MM-dd) (必填)
   */
  birthDate: string;

  /**
   * 年龄 (自动计算)
   */
  age?: number;

  /**
   * 手机号
   */
  mobile?: string;

  /**
   * 邮箱地址
   */
  email?: string;

  /**
   * 状态 (0-已禁用; 1-生效)
   */
  isActive?: number;
}

/** 用户表单类型 */
export interface UserForm {
  /**
   * 主键
   */
  id?: string;

  /**
   * 账号 (必填)
   */
  userAccount?: string;

  /**
   * 昵称 (必填)
   */
  nickname?: string;

  /**
   * 密码 (必填)
   */
  password?: string;

  /**
   * 确认密码 (必填)
   */
  confirmPassword?: string;

  /**
   * 头像 URL (必填)
   */
  avatar?: string;

  /**
   * 性别 (0-女; 1-男) (必填)
   */
  gender?: number;

  /**
   * 出生日期 (格式: yyyy-MM-dd) (必填)
   */
  birthDate?: string;

  /**
   * 年龄 (自动计算)
   */
  age?: number;

  /**
   * 手机号
   */
  mobile?: string;

  /**
   * 邮箱地址
   */
  email?: string;

  /**
   * 邮箱验证码
   */
  captcha?: string;

  /**
   * 状态 (0-已禁用; 1-生效)
   */
  isActive?: number;

  /**
   * 乐观锁
   */
  revision?: string; // ISO 日期字符串

  /**
   * 创建人
   */
  createUserId?: string;

  /**
   * 创建人名称
   */
  createUserName?: string;

  /**
   * 创建时间
   */
  createTime?: string; // ISO 日期字符串

  /**
   * 更新人
   */
  updateUserId?: string;

  /**
   * 更新人名称
   */
  updateUserName?: string;

  /**
   * 更新时间
   */
  updateTime?: string; // ISO 日期字符串
}

/** 个人中心用户信息 */
export interface UserProfileVO {
  /**
   * 主键
   */
  id?: string;

  /**
   * 账号 (必填)
   */
  userAccount: string;

  /**
   * 昵称 (必填)
   */
  nickname: string;

  /**
   * 密码 (必填)
   */
  password: string;

  /**
   * 头像 URL (必填)
   */
  avatar: string;

  /**
   * 性别 (0-女; 1-男) (必填)
   */
  gender: number;

  /**
   * 出生日期 (格式: yyyy-MM-dd) (必填)
   */
  birthDate: string;

  /**
   * 年龄 (自动计算)
   */
  age?: number;

  /**
   * 手机号
   */
  mobile?: string;

  /**
   * 邮箱地址
   */
  email?: string;

  /**
   * 状态 (0-已禁用; 1-生效)
   */
  isActive?: number;

  /**
   * 乐观锁
   */
  revision?: string; // ISO 日期字符串

  /**
   * 创建人
   */
  createUserId?: string;

  /**
   * 创建人名称
   */
  createUserName?: string;

  /**
   * 创建时间
   */
  createTime?: string; // ISO 日期字符串

  /**
   * 更新人
   */
  updateUserId?: string;

  /**
   * 更新人名称
   */
  updateUserName?: string;

  /**
   * 更新时间
   */
  updateTime?: string; // ISO 日期字符串
}

/** 个人中心用户信息表单 */
export interface UserProfileForm {
  /**
   * 主键
   */
  id?: string;

  /**
   * 账号 (必填)
   */
  userAccount: string;

  /**
   * 昵称 (必填)
   */
  nickname: string;

  /**
   * 密码 (必填)
   */
  password: string;

  /**
   * 头像 URL (必填)
   */
  avatar: string;

  /**
   * 性别 (0-女; 1-男) (必填)
   */
  gender: number;

  /**
   * 出生日期 (格式: yyyy-MM-dd) (必填)
   */
  birthDate: string;

  /**
   * 年龄 (自动计算)
   */
  age?: number;

  /**
   * 手机号
   */
  mobile?: string;

  /**
   * 邮箱地址
   */
  email?: string;

  /**
   * 状态 (0-已禁用; 1-生效)
   */
  isActive?: number;

  /**
   * 乐观锁
   */
  revision?: string; // ISO 日期字符串

  /**
   * 创建人
   */
  createUserId?: string;

  /**
   * 创建人名称
   */
  createUserName?: string;

  /**
   * 创建时间
   */
  createTime?: string; // ISO 日期字符串

  /**
   * 更新人
   */
  updateUserId?: string;

  /**
   * 更新人名称
   */
  updateUserName?: string;

  /**
   * 更新时间
   */
  updateTime?: string; // ISO 日期字符串
}

/** 修改密码表单 */
export interface PasswordChangeForm {
  /** 原密码 */
  oldPassword?: string;
  /** 新密码 */
  newPassword?: string;
  /** 确认新密码 */
  confirmPassword?: string;
}

/** 修改手机表单 */
export interface MobileBindingForm {
  /** 手机号 */
  mobile?: string;
  /** 验证码 */
  code?: string;
}

/** 修改邮箱表单 */
export interface EmailBindingForm {
  /** 邮箱 */
  email?: string;
  /** 验证码 */
  code?: string;
}

/** 登录响应 */
export interface LoginResult {
  /** 访问令牌 */
  accessToken: string;
  /** 令牌类型 */
  tokenType: string;
  /** 过期时间(秒) */
  expiresIn: number;
}
